<template>
  <div>
    <input placeholder="输入关键字搜索" v-model="doctor" />
    <table class="my-table">
      <thead>
        <tr>
          <th>就诊日期</th>
          <th>医生姓名</th>
          <th>诊断结果</th>
          <th>处方信息</th>
          <th>操作</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(item, index) in filteredList" :key="index">
          <td>{{ item.date }}</td>
          <td>{{ item.doctor }}</td>
          <td>{{ item.diagnosis }}</td>
          <td>{{ item.prescription }}</td>
          <td @click="showDetails(item)">详情</td>
        </tr>
      </tbody>
    </table>
    <HomeView :visible.sync="isShow" :selectedItem="selectedItem" />
  </div>
</template>

<script>
import HomeView from "./components/HomeView.vue";

export default {
  data() {
    return {
      isShow: false,
      doctor: "",
      records: [
        {
          date: "2022-01-01",
          doctor: "张三",
          diagnosis: "感冒",
          prescription: "感冒药",
        },
        {
          date: "2022-02-01",
          doctor: "李四",
          diagnosis: "头疼",
          prescription: "止疼药",
        },
        {
          date: "2022-03-01",
          doctor: "王五",
          diagnosis: "腰痛",
          prescription: "止痛贴",
        },
      ],
      selectedItem: null,
    };
  },
  computed: {
    filteredList() {
      if (!this.doctor) return this.records;
      return this.records.filter((item) => item.doctor.includes(this.doctor));
    },
  },
  components: {
    HomeView,
  },
  methods: {
    showDetails(item) {
      this.selectedItem = item;
      this.isShow = true;
    },
  },
};
</script>
子组件 (HomeView.vue) html 深色版本
<template>
  <div class="modal-mask" v-show="visible">
    <div class="modal-container">
      <div class="modal-header">
        <h3>就诊记录详情</h3>
        <span class="close-btn" @click="closeBtn">X</span>
      </div>
      <div class="modal-body" v-if="selectedItem">
        <p><strong>就诊日期：</strong>{{ selectedItem.date }}</p>
        <p><strong>医生姓名：</strong>{{ selectedItem.doctor }}</p>
        <p><strong>诊断结果：</strong>{{ selectedItem.diagnosis }}</p>
        <p><strong>处方信息：</strong>{{ selectedItem.prescription }}</p>
      </div>
      <div class="modal-body" v-else>
        <p>没有选择任何记录。</p>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  props: ["visible", "selectedItem"],
  methods: {
    closeBtn() {
      this.$emit("update:visible", false);
    },
  },
};
</script>

<style scoped>
.hidden {
  display: none !important;
}
.modal-mask {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  background-color: rgba(0, 0, 0, 0.5);
  display: flex;
  justify-content: center;
  align-items: center;
}

.modal-container {
  background-color: #fff;
  border-radius: 5px;
  padding: 20px;
  max-width: 500px;
}

.modal-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.close-btn {
  cursor: pointer;
}
</style>
